#ifndef USER_CONFIG_H
#define USER_CONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

//LOG 日志打印
#define APP_LOG_ENABLE				            1
#define APP_LOG_TIMESTAMP_ENABLE                0

//Info 设备信息
#define APP_USB_DEVICE_NAME                     "电子琴Test设备"	// Note:确保是UTF-8编码的字符串，keli工具需要检查一下编码显示，如果是GBK就会有错误
#define APP_USB_MANUFACTURER_NAME               "TEST"

 
//PWR 电源
#define APP_AUTO_POWER_DWON_TIM_COUNT_10MS      60000      //没有数据，自动关机的时间，单位ms
#define PWR_5V_ADC_TH_RAW                       0xC9B       //2.6*4095/2.3 = 3227, 0xC9B, 5伏分压之后ad电压值, 低于2.6伏开始启动
#define PWR_25V_ADC_TH_RAW                      0xB29       //2.3*4095/2.3 = 2857, 0xB29, 27伏分压之后ad电压值, 低于2.3伏开始启动

//ADC
#define TIM_ADC_UPDATE_TH_10MS                  10        // adc dma采集周期，100ms一次

//UART 串口
#define TIM_UART_HEART_BEAT_TH_10MS             30         // uart心跳包发送周期，300ms一次
#define APP_ENABLE_MIDI_AUTO_POWER_ON_UART1     0   //串口1收到MIDI数据自动开机
#define APP_ENABLE_MIDI_AUTO_POWER_ON_UART2     1   //串口2收到MIDI数据自动开机
#define APP_ENABLE_MIDI_AUTO_POWER_ON_UART3     1   //串口3收到MIDI数据自动开机

// 串口报警功能开关
#define UART_ERROR_MONITORING_ENABLE            0   // 启用串口错误监控报警功能，设为0可关闭

#define UART_RX_MSG_QUEUE_SIZE                  8
#define UART_TX_MSG_QUEUE_SIZE_0                8
#define UART_TX_MSG_QUEUE_SIZE_1                8
#define UART_TX_MSG_QUEUE_SIZE_2                8

//USB
#define APP_USB_MIDI_DATA_DECODE                1   //将4字节的MIDI数据转换成3字节的数据

//KEY 按键
#define KEY_PRESS_PWR_SWITCH_TH_MS              2000  //长按和短按的区分阈值，2000ms

//Feature
#define USE_ADC_POWER_DETECT                    0       //开启电源检测

//Pedal
// 定义踏板参数宏（初始化值）
#define APP_PEDAL_HIT_DURATION_INIT             60   // 打击阶段持续时间（单位：ms）
#define APP_PEDAL_HIT_PERIOD_INIT               20   // 打击阶段 PWM 周期（单位：ms）
#define APP_PEDAL_HIT_DUTY_CYCLE_INIT           100   // 打击阶段占空比

#define APP_PEDAL_RETURN_DURATION_INIT          10   // 回击阶段持续时间（单位：ms）
#define APP_PEDAL_RETURN_PERIOD_INIT            20   // 回击阶段 PWM 周期（单位：ms）
#define APP_PEDAL_RETURN_DUTY_CYCLE_INIT        50   // 回击阶段占空比

#define APP_PEDAL_HOVER_DURATION_INIT           0    // 悬停阶段持续时间（单位：ms），0 表示持续
#define APP_PEDAL_HOVER_PERIOD_INIT             20   // 悬停阶段 PWM 周期（单位：ms）
#define APP_PEDAL_HOVER_DUTY_CYCLE_INIT         35   // 悬停阶段占空比

//Buzzer 蜂鸣器
#define APP_BUZZER_INFO_USER_CONFIG
//Buzzer 蜂鸣器
#define APP_BUZZER_POWER_ON_DURATION_MS         200     //开机蜂鸣器触发时间，ms，实际会比该值大，正常定时器偏差
#define APP_BUZZER_POWER_OFF_DURATION_MS        200     //关机蜂鸣器触发时间，ms
#define APP_BUZZER_TRA_TEST_DURATION_MS         2000    //逐渐测试蜂鸣器触发时间，ms

// 电源控制时序相关宏定义
#define PWR_ON_FIRST_DELAY_MS                   300     // 开机第一次延时时间(默认300ms)
#define PWR_ON_SECOND_DELAY_MS                  500     // 开机第二次延时时间(默认500ms)
#define PWR_ON_CMD                              0x0A    // 发送地址码

//LED 灯
/* 模式参数配置 */
#define BREATHE_PERIOD_MS   4000    // 呼吸周期4秒（必须为10的倍数）
#define BLINK_ON_MS         100     // 闪烁亮灯时间 必须为10的倍数）
#define BLINK_OFF_MS        100     // 闪烁灭灯时间（必须为10的倍数）

//MIDI 通信
#define MIDI_COMM_TIMEOUT_10MS                  200     // MIDI通信超时时间(2秒 = 200 * 10ms)

//Flash 配置
#define APP_FLASH_SIZE_KB                       64      // Flash大小(KB) - 可配置为48/64/128等

//WATCHDOG 看门狗配置
#define WATCHDOG_ENABLE                         1       // 启用看门狗功能，设为0可关闭
#define WATCHDOG_TIMEOUT_MS                     2000    // 看门狗超时时间（毫秒）- 实际约2.6秒，考虑余量设为2000ms
#define WATCHDOG_FEED_INTERVAL_COUNT            2       // 主循环计数多少次喂狗一次，避免过于频繁
#define WATCHDOG_PRESCALER                      IWDG_PRESCALER_32  // 预分频值：4,8,16,32,64,128,256

#endif /* APP_CAN_H */
